import { Entity, Column, PrimaryGeneratedColumn, OneToMany, CreateDateColumn, UpdateDateColumn } from 'typeorm';
import { MenuRole } from './menu-role.entity';

/**
 * 菜单
 */
@Entity('sys_menu')
export class Menu {
  /**
   * 菜单id
   */
  @PrimaryGeneratedColumn({ comment: '菜单id' })
  menuId: number;

  /**
   * 路由路径
   */
  @Column({ comment: '路由路径' })
  path: string;

  /**
   * 路径唯一标识
   */
  @Column({ comment: '路径唯一标识' })
  name: string;

  /**
   * 组件路径
   */
  @Column({ comment: '组件路径' })
  component: string;

  /**
   * 重定向
   */
  @Column({ nullable: true, comment: '重定向' })
  redirect: string;

  /** --------------------------meta start-------------------------- */

  /**
   * 菜单图标
   */
  @Column({ comment: '菜单图标' })
  icon: string;

  /**
   * 菜单标题
   */
  @Column({ comment: '菜单标题' })
  title: string;

  /**
   * 是否隐藏
   */
  @Column({ comment: '是否隐藏', type: 'boolean', default: false })
  hidden: boolean;

  /**
   * 是否固定在 tagsView 栏上
   */
  @Column({ comment: '是否固定在 tagsView 栏上', type: 'boolean', default: false })
  isAffix: boolean;

  /**
   * 菜单排序
   */
  @Column({ comment: '菜单排序' })
  orderNo: number;

  /**
   * 上级菜单
   */
  @Column({ nullable: true, comment: '上级菜单', default: 0 })
  parentId: number;

  /**
   * 菜单类型 目录，菜单
   */
  @Column({ comment: '菜单类型' })
  menuType: string;

  /**
   * 是否需要权限管理
   */
  @Column({ comment: '是否需要权限管理', type: 'boolean', default: false })
  isAuth: boolean;

  /**
   * 是否是快捷访问
   */
  @Column({ comment: '是否是快捷访问', type: 'boolean', default: false })
  isShortcut: boolean;

  /**
   * 备注
   */
  @Column({ nullable: true, comment: '备注' })
  remark: string;

  /** --------------------------meta end-------------------------- */

  /**
   * 角色菜单关系
   */
  @OneToMany(() => MenuRole, (menuRole) => menuRole.menu)
  menuRoles: MenuRole[];

  /**
   * 创建时间
   */
  @CreateDateColumn({ comment: '创建时间' })
  createTime: Date;

  /**
   * 更新时间
   */
  @UpdateDateColumn({ comment: '更新时间' })
  updateTime: Date;
}
